In many clustered data storage systems, each of multiple storage servers (e.g., “nodes”) operate cooperatively to provide concurrent access for multiple clients to a data store. Typically, each node is responsible for, or “owns,” a separate set of stored data objects of the data store. While each of the nodes may facilitate access to any stored data object, a node that does not own a data object typically requests that data object from the owner node of the data object, presuming the requesting node has not cached a current copy of the data object locally. If the owner node stores a current copy of the data object in its local cache (e.g., a relatively fast memory device or solid-state drive (SSD)), the owner node may service the request directly from that cache. Otherwise, the owner node may retrieve the data object from a relatively slower backend data storage system (e.g., a magnetic disk drive system), forward the data object to the requesting node, and store the data object in its local cache to service additional requests.
If a requesting node performs a write operation of a data object for which it is not the owner, the requesting node typically invalidates any copy of the object in the local cache of the corresponding owner node, as well as other nodes, before causing the object to be written to the backend storage system. Consequently, the first subsequent read operation from any other node for that object, including a read operation from the owner node, typically causes the owner node to retrieve the data object from the slower backend data storage.